const { defineConfig } = require('@vue/cli-service')
const Mock = require('mockjs')
const bodyParser = require('body-parser') // 引入转json的中间件--post请求需要
const md5 = require('blueimp-md5')
    // 模拟商品列表数据
const { list } = Mock.mock({
        'list|40': [{
            'id|+1': 1, // id从1开始，每次递增1
            'image': '@image(200X200,@color)', // 生成200X200随机颜色的图片
            'title': '@ctitle(3,50)', // 生成3到50个汉字的标题
            'price|1-100.1-2': 1 // 生成1到100之间的浮点数，小数点后1到2位
        }]
    })
    // 模拟分类列表数据
const { products } = Mock.mock({
        'products|70': [{
            'id|+1': 1,
            'classify': '@pick(["食品","电器","洗护","女装","手机"])',
            'title': '@ctitle(3,5)',
            'image': '@image(100X100,@color)'
        }]
    })
    // 存储注册的用户信息：注册的账号密码
const users = [
        { username: '18311844217', password: '123456' }
    ]
    // 验证码
let code = null // 数值类型的空值

module.exports = defineConfig({
    transpileDependencies: true,
    // webpack提供的开发者服务器
    devServer: {
        setupMiddlewares: (mid, dev) => {
            dev.app.use(bodyParser.json()) // 注册body-parser中间件
                // 列表接口
                // dev.app.get('/api/list', (req, res) => {
                //   res.send({
                //     code: 200,
                //     data: list,
                //     total: list.length
                //   })
                // })

            // 列表接口-分页请求
            dev.app.get('/api/list', (req, res) => {
                    const { pagination, pageNum } = req.query // 获取前端传过来的参数：页码、条数
                    res.send({
                        code: 200,
                        // 1  10  ---- 0  1   2  3   4  5  6  7  8  9 
                        //  2  10  ---- 10  11   12  。。。 19 
                        data: list.slice((pagination - 1) * pageNum, pagination * pageNum),
                        total: list.length
                    })
                })
                // 详情接口
            dev.app.get('/api/detail', (req, res) => {
                    const { id } = req.query
                    res.send({
                        code: 200,
                        // find(): 查找数组中符合条件的第一个元素
                        data: list.find(item => item.id == id)
                    })
                })
                // 分类接口
            dev.app.get('/api/kind', (req, res) => {
                    const { key } = req.query
                    res.send({
                        code: 200,
                        data: products.filter(item => item.classify == key)
                    })
                })
                // 搜索接口
            dev.app.get('/api/search', (req, res) => {
                    const { value } = req.query
                    res.send({
                        code: 200,
                        data: list.filter(item => item.title.includes(value))
                    })
                })
                // 注册接口
            dev.app.post('/api/register', (req, res) => {
                    const { username, password } = req.body // 后端接收到前端传来的账号密码
                        // 判断用户输入的账号是否已经存在， 已经存在说明该账号已经注册过了，提示错误；不存在就让正常注册
                        // 判断前端传来的username是否在users这个数组中
                        // every(): 判断数组中所有元素是否都满足条件，只要有一个不满足返回false，所有都满足返回true
                    const isAdd = users.every(item => item.username != username) // isAdd 只能是true或false
                    if (isAdd) {
                        // 说明该账号还未注册
                        users.push({
                            username, // username: username
                            password //  password: password
                        })
                        res.send({
                            code: 200,
                            message: '注册成功'
                        })
                    } else {
                        // 说明该账号已经注册了
                        res.send({
                            code: 0,
                            message: '该账号已经注册了~'
                        })
                    }
                })
                // 登录接口
            dev.app.post('/api/login', (req, res) => {
                    const { username, password, sms } = req.body // 接收参数
                        // 判断前端传来的账号密码是否在数组中，且账号和密码都匹配
                    const user = users.find(item => item.username == username && md5(item.password) == password)
                    if (user) {
                        // 说明账号密码匹配
                        if (sms == code) {
                            res.send({
                                code: 200,
                                token: Mock.Random.guid(), // 生成一个随机的token
                                message: '登录成功'
                            })
                        } else {
                            res.send({
                                code: 0,
                                message: '验证码错误'
                            })
                        }
                    } else {
                        // 说明账号密码不对
                        res.send({
                            code: 0,
                            message: '账号或密码错误'
                        })
                    }
                })
                // 获取验证码接口
            dev.app.get('/api/code', (req, res) => {
                code = Mock.Random.integer(100000, 999999)
                res.send({
                    code: 200,
                    data: code
                })
            })
            return mid
        }
    }
})